home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / DELPHI32 / DEBUG / OBJTEST / MAIN.PAS < prev    next >
Pascal/Delphi Source File  |  1996-06-06  |  5KB  |  166 lines

  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  7.   Forms, Dialogs, ExtCtrls, Clkheadb, StdCtrls, objunit;
  8.  
  9. type
  10.   TfrmMain = class(TForm)
  11.     Memo1: TMemo;
  12.     butAddObject: TButton;
  13.     Label2: TLabel;
  14.     labMean: TLabel;
  15.     butDeleteObject: TButton;
  16.     edtString: TEdit;
  17.     Label6: TLabel;
  18.     labString: TLabel;
  19.     Button4: TButton;
  20.     panHoldMemoObject: TPanel;
  21.     lstObjectString: TListBox;
  22.     chkAutoCalc: TCheckBox;
  23.     Label1: TLabel;
  24.     edtControl: TEdit;
  25.     Memo2: TMemo;
  26.     Label3: TLabel;
  27.     Shape1: TShape;
  28.     procedure butAddObjectClick(Sender: TObject);
  29.     procedure FormCreate(Sender: TObject);
  30.     procedure butDeleteObjectClick(Sender: TObject);
  31.     procedure Button4Click(Sender: TObject);
  32.     procedure lstObjectStringClick(Sender: TObject);
  33.     procedure FormDestroy(Sender: TObject);
  34.     procedure Memo1Enter(Sender: TObject);
  35.   private
  36.     { Private declarations }
  37.   public
  38.     { Public declarations }
  39.     procedure DeleteObject(idx: integer);
  40.     procedure OnDataChange(Sender: TObject);
  41.   end;
  42.  
  43.  
  44. var
  45.   frmMain:            TfrmMain;
  46.   MyStringList:    TStringList;
  47.   MyObject:            TMyObjectClass;
  48.  
  49. implementation
  50.  
  51. {$R *.DFM}
  52.  
  53. {''----------------------------------------------------------------------------}
  54. {3. Everytime the text in the memo changes, this procedure is fired. Mean is a
  55. read only property of TMyObjectClass. Everytime its value is retrived, the
  56. function GetMean is executed.}
  57. procedure TfrmMain.OnDataChange(Sender: TObject);
  58. begin
  59.     if chkAutoCalc.Checked then begin
  60.     with TMyObjectClass(MyStringList.Objects[lstObjectString.ItemIndex]) do begin
  61.       labMean.Caption := 'Mean = ' + FloatToStr(Mean);
  62.     end;
  63.   end;
  64. end;
  65.  
  66. {''----------------------------------------------------------------------------}
  67. {A new object is created and associated with a new string in MyStringList}
  68. procedure TfrmMain.butAddObjectClick(Sender: TObject);
  69.  
  70. begin
  71.     {Create the object and assign ownership to TfrmMain}
  72.     MyObject := TMyObjectClass.Create(Self);
  73.  
  74.   {FMemo itself is created in the MyObject constructor. But since TMemo is
  75.   decended from a TWinControl, it requires a parent. In this can we are putting
  76.   it into a TPanel}
  77.   MyObject.FMemo.Parent := panHoldMemoObject;
  78.  
  79.   {Set the align property and copy the text from memo1}
  80.   MyObject.FMemo.Align := alClient;
  81.   MyObject.FMemo.Lines := memo1.lines;
  82.  
  83.   {The AddObject method allows adding a string and associated object at the
  84.   same time}
  85.     MyStringList.AddObject(edtString.text, MyObject);
  86.  
  87.   {This listbox allows us to select which object is displayed in the panel
  88.   panHoldMemoObject}
  89.      lstObjectString.Items.Add(edtString.text);
  90.   lstObjectString.ItemIndex := lstObjectString.Items.Count - 1; 
  91.   labString.Caption := edtString.text;
  92.  
  93.   {When the objects event OnDataChange is fired execute the code in the TfrmMain
  94.   method OnDataChange}
  95.   MyObject.OnDataChange := OnDataChange;
  96.  
  97.   {Make sure the initial calculation is performed}
  98.   OnDataChange(Self);
  99.  
  100. end;
  101.  
  102. {''----------------------------------------------------------------------------}
  103. procedure TfrmMain.FormCreate(Sender: TObject);
  104. begin
  105.     MyStringList := TStringList.Create;
  106. end;
  107.  
  108. {''----------------------------------------------------------------------------}
  109. procedure TfrmMain.butDeleteObjectClick(Sender: TObject);
  110. begin
  111.     if lstObjectString.ItemIndex > -1 then begin
  112.       DeleteObject(lstObjectString.ItemIndex);
  113.   end else begin
  114.         showmessage('You need to select an item from the listbox below.'); 
  115.   end;
  116.  
  117. end;
  118.  
  119. {''----------------------------------------------------------------------------}
  120. procedure TfrmMain.Button4Click(Sender: TObject);
  121. begin
  122.   with TMyObjectClass(MyStringList.Objects[lstObjectString.ItemIndex]) do begin
  123.     edtControl.Text := FloatToStr(CalcMean(TStringList(memo1.lines)));
  124.   end;
  125. end;
  126.  
  127. {''----------------------------------------------------------------------------}
  128. procedure TfrmMain.lstObjectStringClick(Sender: TObject);
  129. begin
  130.   labString.Caption := MyStringList[lstObjectString.ItemIndex];
  131.   with TMyObjectClass(MyStringList.Objects[lstObjectString.ItemIndex]) do begin
  132.       FMemo.BringToFront;
  133.     labMean.Caption := 'Mean = ' + FloatToStr(Mean);
  134.   end;
  135.  
  136. end;
  137.  
  138. {''----------------------------------------------------------------------------}
  139. procedure TfrmMain.FormDestroy(Sender: TObject);
  140. var
  141.     i: integer;
  142. begin
  143.     for i := MyStringList.Count - 1 downto 0 do begin
  144.         DeleteObject(i);
  145.   end;
  146.  
  147.   MyStringList.Free;
  148. end;
  149.  
  150. {''----------------------------------------------------------------------------}
  151. procedure TfrmMain.DeleteObject(idx: integer);
  152. begin
  153.   MyStringList.Objects[idx] := nil;
  154.   TMyObjectClass(MyStringList.Objects[idx]).Free;
  155.   MyStringList.Delete(idx);
  156.   lstObjectString.Items.Delete(idx);
  157. end;
  158.  
  159.  
  160. procedure TfrmMain.Memo1Enter(Sender: TObject);
  161. begin
  162.     (Sender as TMemo).Clear;
  163. end;
  164.  
  165. end.
  166.